/*
 * Projeto idealizado para ensino interativo com uso de recursos Flash e Java
 * O uso destes codigos eh de extrema restricao, valendo dos direitos dos seus
 * desenvolvedores
 * 
 * @author Fabricio Silva 
 */
package br.com.dimensaointerativo.visao;

import java.awt.BorderLayout;  
import java.awt.Container;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import java.awt.image.BufferedImage;


import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.WindowConstants;
import javax.swing.border.Border;


/**
 * Janela responsável pelo acesso das aulas
 * @author Fabricio Silva
 *
 */
public class ContainerGeral extends JFrame {
	
	private static final long serialVersionUID = 1L;
	private Container container = getContentPane();
	
	private TratarEvento tratarEvento = new TratarEvento();
	private CaptaMovimento movEvento = null;

	private JMenu gestaoAlunos = null;
	private JMenuItem cadastrarAluno = null;
	private JMenuItem gerenciarAluno = null;
	private JMenuItem consultarAluno = null;
	private JMenuBar barraMenu = null;
	private JMenu sobre = null;
	private JMenuItem sobreSistema = null;
	private JMenuItem sair = null;
	
	private JPanel pCentro = null;
	private JLabel lImagem = null;
	private JLabel txtStatus = null;
	private BufferedImage imagem = null;
	private ImageIcon imgIcon = null;
	
	/*
	 * Construtor
	 */
	public ContainerGeral() {
		super("..::Dimensão Interativo::..");
		
		desenharJanela();
		
		setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
		setSize(700, 700);
		setVisible(true);
		
		// Centralizando a janela
		setLocationRelativeTo(null);
		
	}
	
	/**
	 * Responsavel por desenhar a janela referente
	 * a esta classe
	 * @author Fabricio Silva
	 */
	
	public void desenharJanela () {
		container.setLayout(new BorderLayout());

                movEvento = new CaptaMovimento();

		pCentro = new JPanel(new FlowLayout());
		txtStatus = new JLabel("Bem Vindo - Dimensão Interativo!");
		
		container.add(pCentro, BorderLayout.CENTER);
		container.add(barraStatus(), BorderLayout.SOUTH);
		
		//Carregando imagem principal
		/*try {
			imagem = ImageIO.read(new File("/home/fabricio/recursos/call.jpg"));
		}	catch (IOException e) {
			e.printStackTrace();
		}
		imgIcon = new ImageIcon(imagem);
		lImagem = new JLabel(imgIcon);
		pCentro.add(lImagem);*/
		pCentro.setName("centro");
		
		barraMenu = new JMenuBar();

		// Criando os menus
		gestaoAlunos = new JMenu("Gerenciar Alunos");		
		sobre = new JMenu("Sobre");
		
		// Criando os itens de menu
		sair = new JMenuItem("Sair");
		cadastrarAluno = new JMenuItem("Cadastrar Aluno");
		gerenciarAluno = new JMenuItem("Gerenciar Aluno");
		consultarAluno = new JMenuItem("Consultar Aluno");
		sobreSistema = new JMenuItem("Sobre o Sistema");
		
		gestaoAlunos.setName("gestaoAlunos");
		cadastrarAluno.setName("cadastrarAluno");
		gerenciarAluno.setName("gerenciarAluno");
		consultarAluno.setName("consultarAluno");
                sobreSistema.setName("sobreSistema");
		sobre.setName("sobre");
		sair.setName("sair");
		
		gestaoAlunos.setMnemonic('G');
		cadastrarAluno.setMnemonic('C');
		gerenciarAluno.setMnemonic('e');
		consultarAluno.setMnemonic('o');
		sobre.setMnemonic('S');
		sair.setMnemonic('r');

                sair.addActionListener(tratarEvento);
		sair.addMouseMotionListener(movEvento);
		gestaoAlunos.addMouseMotionListener(movEvento);
		cadastrarAluno.addMouseMotionListener(movEvento);
		gerenciarAluno.addMouseMotionListener(movEvento);
		consultarAluno.addMouseMotionListener(movEvento);
		sobreSistema.addMouseMotionListener(movEvento);
		sobre.addMouseMotionListener(movEvento);
		pCentro.addMouseMotionListener(movEvento);

		setJMenuBar(barraMenu);
		barraMenu.add(gestaoAlunos);
		barraMenu.add(sobre);
		gestaoAlunos.add(cadastrarAluno);
		gestaoAlunos.add(gerenciarAluno);
		gestaoAlunos.add(consultarAluno);
		gestaoAlunos.add(sair);
		sobre.add(sobreSistema);
		
		/*
		 * Especificando eventos dos itens de Menu
		 */
		sair.addActionListener(tratarEvento);
		sobreSistema.addActionListener(tratarEvento);
		gerenciarAluno.addActionListener(tratarEvento);
                cadastrarAluno.addActionListener(tratarEvento);
	}
	
	/**
	 * Classe interna para tratar todos os eventos desta janela
	 * @author Fabricio Silva
	 *
	 */
	private class TratarEvento implements ActionListener {
		public void actionPerformed (ActionEvent e) {
			if (e.getActionCommand().equals("Sair")) {
				System.exit(0);
			}
			
			if (e.getActionCommand().equals("Gerenciar Aluno")) {
				GerenciarAluno gerenciarAluno = new GerenciarAluno();
			}
			if (e.getActionCommand().equals("Cadastrar Aluno")) {
				CadastrarAluno cadastrarAluno = new CadastrarAluno();
			}
                        
			if (e.getActionCommand().equals("Sobre o Sistema")) {
				JOptionPane.showMessageDialog(null, 
						"Sistema Dimensão Interativo\n" +
						"Implementado com foco em auxiliar o ensino de disciplinas\n" +
						"relacionados a TI (Tecnologia da Informação)\n" +
						"Ano: 2012\n" +
						"Autores: Fabricio Silva; Thiago Aragão.\n" +
						"",
						"..::Sobre o Sistema::..", JOptionPane.INFORMATION_MESSAGE);
			}
		}
	}
	/**
	 * Desenhando a barra de status do aplicativo
	 * principal
	 * @return
	 */
	public JPanel barraStatus() {
		JPanel retorno = new JPanel();
		Border borda = BorderFactory.createLoweredBevelBorder();
		txtStatus.setPreferredSize(new Dimension(2000, 20));
		txtStatus.setBorder(borda);
		retorno.setLayout(new FlowLayout(FlowLayout.LEFT, 1, 0));
		retorno.add(txtStatus);
		return retorno;

    }
        /**
	 * Responsavel por trabalhar no processamento de movimentos
	 * realizados do mouse a respeito de um determinado
	 * componente existente no painel central, desta
	 * forma o sistema podera instruir o usuario a realizar
	 * determinadas ações a partir da barra de status
	 *
	 * @author Anderson Guimaraes
	 *
	 */
	private class CaptaMovimento implements MouseMotionListener {
		public void mouseDragged(MouseEvent e){}
		public void mouseMoved(MouseEvent e) {
			if(e.getComponent().getName().equals("sair")) {
				txtStatus.setText("Fechar o aplicativo");
			}

			if(e.getComponent().getName().equals("sobre")) {
				txtStatus.setText("Caracteristicas do sistema");
			}

			if(e.getComponent().getName().equals("consultarAluno")) {
				txtStatus.setText("Permite realizar diferentes consultas na base de dados");
			}

			if(e.getComponent().getName().equals("cadastrarAluno")) {
				txtStatus.setText("Efetiva o registro na base de dados de diferentes recursos");
			}

                        if(e.getComponent().getName().equals("gestaoAlunos")) {
				txtStatus.setText("Gerenciamento de informações do aluno");
			}

			if(e.getComponent().getName().equals("gerenciarAluno")) {
				txtStatus.setText("Gerenciamento de cadastro do aluno");
			}

			if(e.getComponent().getName().equals("sobreSistema")) {
				txtStatus.setText("Especificação a respeito do autor e funcionalidades do sistema");
			}

			if (e.getComponent().getName().equals("centro")) {
				txtStatus.setText("Bem Vindo - Dimensão Interativo!");
			}
		}
	}

	public JLabel getTxtStatus() {
		return txtStatus;
	}

	public void setTxtStatus(JLabel txtStatus) {
		this.txtStatus = txtStatus;
	}
}
